home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Src / MTAconsole / popup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  6.2 KB  |  301 lines

  1. /* popup.c: pop up and down routines */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Src/MTAconsole/RCS/popup.c,v 6.0 1991/12/18 20:26:48 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Src/MTAconsole/RCS/popup.c,v 6.0 1991/12/18 20:26:48 jpo Rel $
  9.  *
  10.  * $Log: popup.c,v $
  11.  * Revision 6.0  1991/12/18  20:26:48  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include        "console.h"
  19.  
  20. extern Popup_menu     *yesno,
  21.             *one,
  22.             *two,
  23.             *three,
  24.             *config,
  25.             *qcontrol;
  26. extern Widget        refresh_toggle,
  27.             reconnect_toggle,
  28.             backoff_toggle,
  29.             top,
  30.             mainform;
  31. extern XColor        black,
  32.             white;
  33. extern Pixel        bg, fg;
  34. Popup_menu *currentpopup = NULL;
  35. extern Operations    currentop;
  36. extern Heuristic    newheur;
  37.  
  38. Popup(this, op, x,y)
  39. Popup_menu    *this;
  40. Operations    op;
  41. int        x,
  42.         y;
  43. {
  44.     int    i;
  45.     currentpopup = this;
  46.     this->op = op;
  47.     XtVaSetValues(this->popup,
  48.           XtNx,    x,
  49.           XtNy, y,
  50.           NULL);
  51.     if (this != yesno 
  52.         && this != qcontrol) {
  53.         switch (currentop) {
  54.             case msgclear:
  55.             case msgstart:
  56.             case msgstop:
  57.             case msgforce:
  58.             this->selected = 1;
  59.             break;
  60.             default:            
  61.             this->selected = 0;
  62.             break;
  63.         }
  64.  
  65.         for (i = 0; i < this -> numberOftuples; i++)
  66.             if (i != this -> selected)
  67.                 XtVaSetValues(this->tuple[i].text,
  68.                       XtNborderColor, bg,
  69.                       NULL);
  70.         XtSetKeyboardFocus(this->form,
  71.                    this->tuple[this->selected].text);
  72.         XtSetKeyboardFocus(top, 
  73.                    this->tuple[this->selected].text);
  74.         XtVaSetValues(this->tuple[this->selected].text,
  75.               XtNborderColor, fg,
  76.               NULL);
  77.  
  78.     } else {
  79.         XtSetKeyboardFocus(top, this->form);
  80.     }
  81.     XtPopup(this->popup, XtGrabExclusive);
  82. }
  83.  
  84. Popdown(this)
  85. Popup_menu    *this;
  86. {
  87.     currentpopup = NULL;
  88.     if (this != NULL) {
  89.         XtPopdown(this->popup);
  90.         XtSetKeyboardFocus(top, mainform);
  91.     }
  92. }
  93.  
  94. /*   */
  95. /* routines to move selected fields in popups */
  96.  
  97. extern int        newauth;
  98. extern Popup_menu    *connectpopup;
  99.  
  100. /* ARGSUSED */
  101. void    previousField(w, event, params, num_params)
  102. Widget    w;
  103. XEvent    *event;
  104. char       **params;
  105. int    num_params;
  106. {
  107.     int old;
  108.  
  109.     if (currentpopup == NULL
  110.         || currentpopup->numberOftuples < 2)
  111.         return;
  112.  
  113.     old = currentpopup->selected;
  114.         
  115.     currentpopup->selected--;
  116.     if (currentpopup->selected < 0) {
  117.         if (currentpopup == connectpopup
  118.             && newauth == False)
  119.             currentpopup->selected = 1;
  120.         else if (currentpopup == config) {
  121.             switch(newheur) {
  122.                 case percentage:
  123.                 currentpopup->selected = MINBADMTA;
  124.                 break;
  125.                 case line:
  126.                 currentpopup->selected = LINEMAX;
  127.                 break;
  128.                 case all:
  129.                 currentpopup->selected = CONNECTMAX;
  130.                 break;
  131.                 case chanonly:
  132.                 currentpopup->selected = CONNECTMAX;
  133.                 break;
  134.             }
  135.         } else
  136.             currentpopup->selected = 
  137.                 currentpopup->numberOftuples -1;
  138.     } else if (currentpopup == config
  139.            && old == LINEMAX
  140.            && newheur == line)
  141.         currentpopup->selected = CONNECTMAX;
  142.  
  143.     XtSetKeyboardFocus(top,
  144.                currentpopup->tuple[currentpopup->selected].text);
  145.     XtSetKeyboardFocus(currentpopup->form,
  146.                currentpopup->tuple[currentpopup->selected].text);
  147.     XtVaSetValues(currentpopup->tuple[currentpopup->selected].text,
  148.           XtNborderColor, fg,
  149.           NULL);
  150.     XtVaSetValues(currentpopup->tuple[old].text,
  151.           XtNborderColor, bg,
  152.           NULL);
  153. }
  154.  
  155. /* ARGSUSED */
  156. void    thisField(w, event, params, num_params)
  157. Widget    w;
  158. XEvent    *event;
  159. char    **params;
  160. int    num_params;
  161. {
  162.     int    ix;
  163.     
  164.     if (currentpopup == NULL
  165.         || currentpopup->numberOftuples < 2)
  166.         return;
  167.  
  168.     ix = 0;
  169.     while (ix < currentpopup->numberOftuples
  170.            && currentpopup->tuple[ix].text != w)
  171.         ix++;
  172.     
  173.     if (ix >= currentpopup->numberOftuples)
  174.         return;
  175.     
  176.     XtVaSetValues(currentpopup->tuple[currentpopup->selected].text,
  177.               XtNborderColor, bg,
  178.               NULL);
  179.     currentpopup->selected = ix;
  180.     XtVaSetValues(currentpopup->tuple[currentpopup->selected].text,
  181.               XtNborderColor, fg,
  182.               NULL);
  183.     XtSetKeyboardFocus(top,
  184.                currentpopup->tuple[currentpopup->selected].text);
  185.     XtSetKeyboardFocus(currentpopup->form,
  186.                currentpopup->tuple[currentpopup->selected].text);
  187. }
  188.  
  189. /* ARGSUSED */
  190. void    nextField(w, event, params, num_params)
  191. Widget    w;
  192. XEvent    *event;
  193. char       **params;
  194. int    num_params;
  195. {
  196.     int old;
  197.  
  198.     if (currentpopup == NULL
  199.         || currentpopup->numberOftuples < 2)
  200.         return;
  201.  
  202.     old = currentpopup->selected;
  203.         
  204.     currentpopup->selected++;
  205.     
  206.     if (currentpopup->selected >= currentpopup->numberOftuples)
  207.         currentpopup->selected = 0;
  208.  
  209.     if (currentpopup == connectpopup
  210.         && newauth == False
  211.         && currentpopup->selected > 1)
  212.         currentpopup->selected = 0;
  213.  
  214.     if (currentpopup == config
  215.         && currentpopup->selected > CONNECTMAX) {
  216.         switch (newheur) {
  217.             case percentage:
  218.             if (currentpopup->selected > MINBADMTA)
  219.                 currentpopup->selected = 0;
  220.             break;
  221.             case line:
  222.             currentpopup->selected = LINEMAX;
  223.             break;
  224.             case all:
  225.             case chanonly:
  226.             currentpopup->selected = 0;
  227.         }
  228.     }
  229.  
  230.  
  231.     XtSetKeyboardFocus(top,
  232.                currentpopup->tuple[currentpopup->selected].text);
  233.     XtSetKeyboardFocus(currentpopup->form,
  234.                currentpopup->tuple[currentpopup->selected].text);
  235.     XtVaSetValues(currentpopup->tuple[currentpopup->selected].text,
  236.           XtNborderColor, fg,
  237.           NULL);
  238.     XtVaSetValues(currentpopup->tuple[old].text,
  239.           XtNborderColor, bg,
  240.           NULL);
  241. }
  242.  
  243. /* ARGSUSED */
  244. void    mymenupopdown(w, event)
  245. Widget    w;
  246. XEvent    *event;
  247. {
  248.     Popdown(currentpopup);
  249. }
  250.  
  251. extern char    password[];
  252. #define STRBUFSIZE    100
  253. static XComposeStatus compose_status = {NULL, 0};
  254. /* ARGSUSED */
  255. void    myinsert_char(w, event)
  256. Widget    w;
  257. XKeyEvent    *event;
  258. {
  259.     char    strbuf[STRBUFSIZE],
  260.         xbuf[STRBUFSIZE];
  261.     int    ix;
  262.     KeySym    keycode;
  263.     int    length, passwdlen;
  264.     length = XLookupString(event, strbuf, STRBUFSIZE,
  265.                    &keycode, &compose_status);
  266.     if (length == 0) return;
  267.     passwdlen = strlen(password);
  268.     strncat(password, strbuf, length);
  269.     password[length+passwdlen] = '\0';
  270.     
  271.     for (ix = 0; ix < length + passwdlen; ix++)
  272.          xbuf[ix] = 'X';
  273.     xbuf[ix] = NULL;
  274. #ifdef notdef
  275.     if (length == 1 && strbuf[0] == '\?')
  276.         text.ptr = &strbuf[0];
  277.     else
  278.         text.ptr = &xbuf[0];
  279. #endif
  280.     XtVaSetValues (w, XtNstring, xbuf, 0);
  281. }
  282.  
  283. /* ARGSUSED */
  284. void    mydelete_char(w, event)
  285. Widget    w;
  286. XEvent    *event;
  287. {
  288.     char    xbuf[STRBUFSIZE];
  289.     int    ix;
  290.     int    passwdlen;
  291.  
  292.     passwdlen = strlen(password) -1;
  293.     if (passwdlen >= 0) {
  294.         password[passwdlen] = '\0';
  295.         for (ix = 0; ix < passwdlen; ix++)
  296.             xbuf[ix] = 'X';
  297.         xbuf[passwdlen] = '\0';
  298.         textdisplay(&(connectpopup->tuple[3]), xbuf);
  299.     }
  300. }
  301.